10d3140d7b1ffdd204e243de0af27d5d9a676861,src/com/linkedin/parseq/Task.java,Task,recoverWith,#String#Function1#,712

Before Change


  default Task<T> recoverWith(final String desc, final Function1<Throwable, Task<T>> func) {
    ArgumentUtil.requireNotNull(func, "function");
    final Task<T> that = this;
    return async(desc, context -> {
      final SettablePromise<T> result = Promises.settable();
      final Task<T> recovery = async("recovery", ctx -> {
        final SettablePromise<T> recoveryResult = Promises.settable();
        if (that.isFailed()) {
          if (!(Exceptions.isCancellation(that.getError()))) {
            try {
              Task<T> r = func.apply(that.getError());
              Promises.propagateResult(r, recoveryResult);
              ctx.run(r);
            } catch (Throwable t) {
              recoveryResult.fail(t);
            }
          } else {
            recoveryResult.fail(that.getError());
          }
        } else {
          recoveryResult.done(that.get());
        }
        return recoveryResult;
      });
      recovery.getShallowTraceBuilder().setSystemHidden(true);
      Promises.propagateResult(recovery, result);
      context.after(that).run(recovery);
      context.run(that);
      return result;
    });
  }

  /**

After Change


  default Task<T> recoverWith(final String desc, final Function1<Throwable, Task<T>> func) {
    ArgumentUtil.requireNotNull(func, "function");
    final Task<T> that = this;
    Task<T> recoverWithTask = async(desc, context -> {
      final SettablePromise<T> result = Promises.settable();
      final Task<T> recovery = async("recovery", ctx -> {
        final SettablePromise<T> recoveryResult = Promises.settable();
        if (that.isFailed()) {
          if (!(Exceptions.isCancellation(that.getError()))) {
            try {
              Task<T> r = func.apply(that.getError());
              Promises.propagateResult(r, recoveryResult);
              ctx.run(r);
            } catch (Throwable t) {
              recoveryResult.fail(t);
            }
          } else {
            recoveryResult.fail(that.getError());
          }
        } else {
          recoveryResult.done(that.get());
        }
        return recoveryResult;
      });
      recovery.getShallowTraceBuilder().setSystemHidden(true);
      recovery.getShallowTraceBuilder().setTaskType(TaskType.RECOVER.getName());
      Promises.propagateResult(recovery, result);
      context.after(that).run(recovery);
      context.run(that);
      return result;
    });
    recoverWithTask.getShallowTraceBuilder().setTaskType(TaskType.WITH_RECOVER.getName());
    return recoverWithTask;
  }

  /**